package geradores;

import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Set;

import util.ArquivoUtil;

public class GeradorCodigoObjetoClasse {

	private static String nomeArquivoSaida = "Classe";

	private static String caminhoArquivo = "c:\\gerador\\saida\\";

	private PrintWriter arquivoSaidaClasseClasse;

	private HashMap<String, String> regrasInfo = new HashMap<>();

	/**
	 * Construtor padrão
	 * 
	 * @param regrasInfo
	 */
	public GeradorCodigoObjetoClasse(HashMap<String, String> regrasInfo) {
		super();
		this.regrasInfo = regrasInfo;
		try {
			this.arquivoSaidaClasseClasse = ArquivoUtil.criarArquivo(caminhoArquivo, nomeArquivoSaida + ".java");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}

	/**
	 * Método que inicio a geração do ENUM de Classe, Sendo que as classes são
	 * baseadas no arquivo de regrasInfo
	 */
	public void gerar() {

		ArquivoUtil.escreverArquivo("public enum " + nomeArquivoSaida + " {\n", arquivoSaidaClasseClasse);
		ArquivoUtil.escreverArquivo("\tPALAVRA_RESERVADA,\n", arquivoSaidaClasseClasse);

		Set<String> chaves = this.regrasInfo.keySet();
		
		for (String chave : chaves) {
			if (chave != null)
				ArquivoUtil.escreverArquivo("\t" + chave.toUpperCase() + ",\n", arquivoSaidaClasseClasse);
		}

		ArquivoUtil.escreverArquivo("\tEOF;\n\n", arquivoSaidaClasseClasse);
		ArquivoUtil.escreverArquivo("}\n", arquivoSaidaClasseClasse);

		fechaArquivo();
	}

	/**
	 * Método para fechar o arquivo
	 */
	private void fechaArquivo() {
		ArquivoUtil.fecharArquivo(arquivoSaidaClasseClasse);
	}

}
